/*
 * @Author: wwssaabb
 * @Date: 2021-12-02 09:33:17
 * @LastEditTime: 2021-12-02 09:34:30
 * @FilePath: \handwritten-code\algorithm\杨辉三角.js
 */

/* 
给定一个非负整数 numRows， 生成「 杨辉三角」 的前 numRows 行。

在「 杨辉三角」 中， 每个数是它左上方和右上方的数的和。

示例 1:

  输入: numRows = 5
输出: [
  [1],
  [1, 1],
  [1, 2, 1],
  [1, 3, 3, 1],
  [1, 4, 6, 4, 1]
]
示例 2:

  输入: numRows = 1
输出: [
  [1]
]

来源： 力扣（ LeetCode）
链接： https: //leetcode-cn.com/problems/pascals-triangle
*/

/**
 * @param {number} numRows
 * @return {number[][]}
 */
var generate = function (numRows) {
  let res = [
    [1],
    [1, 1]
  ]
  if (numRows === 1) return [res[numRows - 1]]
  if (numRows === 2) return res
  while (res.length < numRows) {
    res.push([1, ...(function () {
      let arr = []
      for (let i = 0; i < res[res.length - 1].length - 1; i++) {
        arr.push(res[res.length - 1][i] + res[res.length - 1][i + 1])
      }
      return arr
    })(), 1])
  }
  return res
};


/**
 * @param {number} numRows
 * @return {number[][]}
 */
var generate = function (numRows) {
  let res = []
  for (let i = 0; i < numRows; i++) {
    let row = Array(i + 1).fill(1)
    for (let j = 1; j < row.length - 1; j++) {
      row[j] = res[i - 1][j - 1] + res[i - 1][j]
    }
    res.push(row)
  }
  return res
};